package com.wyz.socket.core.utils;

public class ByteUtils {
    /**
     * 比较两个字节数组的开始 类似于String.start
     * @param source
     * @param match
     * @return
     */
    public static boolean startsWith(byte[] source, byte[] match) {
        return startsWith(source, 0, match);
    }

    public static boolean startsWith(byte[] source, int offset, byte[] match) {
        if (match.length > (source.length - offset)) {
            return false;
        }
        for (int i = 0; i < match.length; i++) {
            if (source[offset + i] != match[i]) {
                return false;
            }
        }
        return true;
    }

    /**
     * 比较两个字节数组是否相等
     * @param source
     * @param match
     * @return
     */
    public static boolean equals(byte[] source, byte[] match) {

        if (match.length != source.length) {
            return false;
        }
        return startsWith(source, 0, match);
    }

    /**
     * 截取字节数组的某段到指定的字节数组中
     * @param source
     * @param srcBegin
     * @param srcEnd
     * @param destination
     * @param dstBegin
     */
    public static void getBytes(byte[] source, int srcBegin, int srcEnd, byte[] result,
                                int dstBegin) {
        System.arraycopy(source, srcBegin, result, dstBegin, srcEnd - srcBegin);
    }

    /**
     * 返回某段字节数组的内容
     * @param source
     * @param srcBegin
     * @param srcEnd
     * @return
     */
    public static byte[] subbytes(byte[] source, int srcBegin, int srcEnd) {
        byte destination[];
        destination = new byte[srcEnd - srcBegin];
        getBytes(source, srcBegin, srcEnd, destination, 0);
        return destination;
    }

    /**
     * 返回开始到之后的
     * @param source
     * @param srcBegin
     * @return
     */
    public static byte[] subbytes(byte[] source, int srcBegin) {
        return subbytes(source, srcBegin, source.length);
    }

    /**
     * 返回指定位置之前的 如果指定位置大于数组长度 则返回全部数组
     * @param source
     * @param srcBegin
     * @return
     */
    public static byte[] subbytesBefore(byte[] source, int srcEnd) {
        if(source.length < srcEnd){
            srcEnd = source.length ;
        }
        return subbytes(source, 0, srcEnd);
    }
}
